package top.lwaiting.dao.impl;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import top.lwaiting.dao.IUserDao;
import top.lwaiting.domain.User;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * 传统开发⽅式-手动实现
 * @author YANG
 * @version V1.0
 * @date 2024/1/24 17:19
 * @see UserDaoImpl
 **/
public class UserDaoImpl implements IUserDao {
    @Override
    public List<User> findAll() throws IOException {
        // 1、Resources  工具类，进行配置文件加载，把配置文件加载成字节输入流
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        // 2、解析配置文件，创建 SqlSessionFactory 工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        // 3、生产 SqlSession，会话对象 封装了与数据库交互的方法，openSession 默认开启一个事务，但是该事务不会自动提交，在进行增删改操作时需要手动提交事务
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 4、sqlSession 调用方法：查询所有 selectList，查询单个 selectOne，添加 insert，修改 update，删除 delete
        List<User> list = sqlSession.selectList("top.lwaiting.domain.User.findAll");

        sqlSession.close();

        return list;
    }

    @Override
    public List<User> findByCondition(User user) {
        return null;
    }

    @Override
    public List<User> findByIds(int[] ids) {
        return null;
    }
}
